--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dockerfile HEAD (b89dc9e6) Text, 4.48 KB
T8b949e# Alpine MeshChatX image.
T8b949e# Stages: frontend, python builder (deps + app overlay), runtime.
T8b949e# VARIANT=standard|extra (extra adds i2pd and yggdrasil).
T8b949e# LXST musl filterlib bake runs in scripts/docker/prepare-venv.sh.
Tff7b72ARG Te6edf3NODE_IMAGETff7b72=node:24-alpine
Tff7b72ARG Te6edf3NODE_HASHTff7b72=sha256:0340fa682d72068edf603c305bfbc10e23219fb0e40df58d9ea4d6f33a9798bf
Tff7b72ARG Te6edf3PYTHON_IMAGETff7b72=python:3.14.4-alpine3.23
Tff7b72ARG Te6edf3PYTHON_HASHTff7b72=sha256:dd4d2bd5b53d9b25a51da13addf2be586beebd5387e289e798e4083d94ca837a
Tff7b72ARG Te6edf3VARIANTTff7b72=standard
Tff7b72ARG Te6edf3OCI_DESCRIPTIONTff7b72=Ta5d6ff"MeshChatX is an all-in-one Reticulum client."
Tff7b72ARG Te6edf3OCI_LICENSESTff7b72=Ta5d6ff"MIT AND 0BSD"
Tff7b72FROM Ta5d6ff--platform=linux/amd64 Tffd700${Te6edf3NODE_IMAGETffd700}@Tffd700${Te6edf3NODE_HASHTffd700} AS build-frontend
Tff7b72WORKDIR Ta5d6ff/src
Tff7b72RUN apk add --no-cache git python3 go
Tff7b72COPY package.json pnpm-lock.yaml pnpm-workspace.yaml vite.config.js ./
Tff7b72COPY patches ./patches
Tff7b72COPY scripts/fetch-micron-wasm.mjs scripts/fetch-micron-wasm.mjs
Tff7b72COPY scripts/micron-wasm-resolve-bundled.mjs scripts/micron-wasm-resolve-bundled.mjs
Tff7b72COPY scripts/micron-parser-go-version.mjs scripts/micron-parser-go-version.mjs
Tff7b72COPY scripts/build-visualiser-wasm.mjs scripts/build-visualiser-wasm.mjs
Tff7b72COPY scripts/sync-meshchatx-docs.js scripts/sync-meshchatx-docs.js
Tff7b72COPY scripts/pip_rns_remotes.py scripts/pip_rns_remotes.py
Tff7b72COPY scripts/build/fetch_reticulum_manual.py scripts/build/fetch_reticulum_manual.py
Tff7b72COPY scripts/build/generate_service_worker.mjs scripts/build/generate_service_worker.mjs
Tff7b72COPY scripts/docker/build-frontend.sh scripts/docker/build-frontend.sh
Tff7b72COPY docs ./docs
Tff7b72COPY visualiser-wasm ./visualiser-wasm
Tff7b72COPY meshchatx/src/frontend ./meshchatx/src/frontend
Tff7b72ENV Te6edf3GOCACHETff7b72=/tmp/go-cache
Tff7b72ENV Te6edf3GOTMPDIRTff7b72=/tmp/go-tmp
Tff7b72RUN sh scripts/docker/build-frontend.sh
Tff7b72FROM Ta5d6ff${PYTHON_IMAGE}@${PYTHON_HASH} Tff7b72AS Ta5d6ffbuilder
Tff7b72WORKDIR Ta5d6ff/build
Tff7b72COPY scripts/docker/builder-apk-alpine.sh scripts/docker/builder-apk-alpine.sh
Tff7b72RUN sh scripts/docker/builder-apk-alpine.sh
Tff7b72RUN pip install --no-cache-dir --upgrade Ta5d6ff"pip>=26.0" uv setuptools wheel Ta5d6ff"jaraco.context>=6.1.0"
Tff7b72RUN python -m venv /opt/venv
Tff7b72ENV Te6edf3PATHTff7b72=Ta5d6ff"Ta5d6ff/opt/venv/bin:Te6edf3$PATHTa5d6ff"
Tff7b72ENV Te6edf3UV_PROJECT_ENVIRONMENTTff7b72=/opt/venv
Tff7b72RUN pip install --no-cache-dir --upgrade Ta5d6ff"pip>=26.0" Ta5d6ff"setuptools" Ta5d6ff"jaraco.context>=6.1.0"
Tff7b72COPY pyproject.toml uv.lock README.md CHANGELOG.md ./
Tff7b72COPY logo ./logo
Tff7b72COPY vendor ./vendor
Tff7b72COPY scripts/docker-bake-lxst-filterlib-musl.py ./scripts/docker-bake-lxst-filterlib-musl.py
Tff7b72COPY scripts/patch_lxst_pyogg_ogg_ctypes.py ./scripts/patch_lxst_pyogg_ogg_ctypes.py
Tff7b72COPY scripts/patch_lxst_codec2_optional.py ./scripts/patch_lxst_codec2_optional.py
Tff7b72COPY meshchatx/src/backend/lxst_pyogg_ctypes_compat.py ./meshchatx/src/backend/lxst_pyogg_ctypes_compat.py
Tff7b72COPY scripts/docker/prepare-venv.sh scripts/docker/prepare-venv.sh
Tff7b72COPY scripts/docker/build-app-overlay.sh scripts/docker/build-app-overlay.sh
Tff7b72RUN sh scripts/docker/prepare-venv.sh
Tff7b72COPY meshchatx ./meshchatx
Tff7b72COPY --fromTff7b72=build-frontend /src/meshchatx/public ./meshchatx/public
Tff7b72RUN sh scripts/docker/build-app-overlay.sh
Tff7b72FROM Ta5d6ff${PYTHON_IMAGE}@${PYTHON_HASH}
Tff7b72ARG VARIANT
Tff7b72ARG OCI_DESCRIPTION
Tff7b72ARG OCI_LICENSES
Tff7b72COPY scripts/docker/runtime-setup.sh /tmp/runtime-setup.sh
Tff7b72RUN sh /tmp/runtime-setup.sh Ta5d6ff"Tffd700${Te6edf3VARIANTTffd700}Ta5d6ff" Tff7b72&& rm /tmp/runtime-setup.sh
Tff7b72COPY --fromTff7b72=builder --chownTff7b72=meshchat:meshchat /opt/venv-deps /opt/venv
Tff7b72COPY --fromTff7b72=builder --chownTff7b72=meshchat:meshchat /opt/app-overlay/ /opt/venv/
Tff7b72COPY scripts/docker-entrypoint.sh /docker-entrypoint.sh
Tff7b72RUN chmod +x /docker-entrypoint.sh
Tff7b72ARG Te6edf3OCI_REVISIONTff7b72=Ta5d6ff""
Tff7b72ARG Te6edf3OCI_VERSIONTff7b72=Ta5d6ff""
Tff7b72ARG Te6edf3OCI_CREATEDTff7b72=Ta5d6ff""
Tff7b72LABEL org.opencontainers.image.sourceTff7b72=Ta5d6ff"https://github.com/Quad4-Software/MeshChatX"
Tff7b72LABEL org.opencontainers.image.descriptionTff7b72=Ta5d6ff"Tffd700${Te6edf3OCI_DESCRIPTIONTffd700}Ta5d6ff"
Tff7b72LABEL org.opencontainers.image.licensesTff7b72=Ta5d6ff"Tffd700${Te6edf3OCI_LICENSESTffd700}Ta5d6ff"
Tff7b72LABEL org.opencontainers.image.authorsTff7b72=Ta5d6ff"Quad4"
Tff7b72LABEL org.opencontainers.image.revisionTff7b72=Ta5d6ff"Tffd700${Te6edf3OCI_REVISIONTffd700}Ta5d6ff"
Tff7b72LABEL org.opencontainers.image.versionTff7b72=Ta5d6ff"Tffd700${Te6edf3OCI_VERSIONTffd700}Ta5d6ff"
Tff7b72LABEL org.opencontainers.image.createdTff7b72=Ta5d6ff"Tffd700${Te6edf3OCI_CREATEDTffd700}Ta5d6ff"
Tff7b72ENV Te6edf3PATHTff7b72=Ta5d6ff"Ta5d6ff/opt/venv/bin:Te6edf3$PATHTa5d6ff"
Tff7b72ENV Te6edf3PYTHONUNBUFFEREDTff7b72=T79c0ff1
Tff7b72ENV Te6edf3PYTHONDONTWRITEBYTECODETff7b72=T79c0ff1
Tff7b72ENV Te6edf3MESHCHAT_FORCE_WEB_AUDIOTff7b72=T79c0ff1
Tff7b72USER Ta5d6ffmeshchat
T8b949e# Podman OCI layout drops HEALTHCHECK. Use: podman build --format docker
Tff7b72HEALTHCHECK --intervalTff7b72=30s --timeoutTff7b72=5s --start-periodTff7b72=90s --retriesTff7b72=T79c0ff3 Tffea00\
CMD Tff7b72[Ta5d6ff"python", Ta5d6ff"-c", Ta5d6ff"import ssl, urllib.request; urllib.request.urlopen('https://127.0.0.1:8000/api/v1/status', context=ssl._create_unverified_context())"Tff7b72]
Tff7b72ENTRYPOINT Tb4b4b4[Ta5d6ff"/docker-entrypoint.sh"Tb4b4b4]
Tff7b72CMD Tb4b4b4[Ta5d6ff"meshchatx"Tb4b4b4, Ta5d6ff"--host=0.0.0.0"Tb4b4b4, Ta5d6ff"--reticulum-config-dir=/config/.reticulum"Tb4b4b4, Ta5d6ff"--storage-dir=/config/.reticulum-meshchatx"Tb4b4b4, Ta5d6ff"--headless"Tb4b4b4]
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────